Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Связанные таблицы в MySQL с некоторыми ограничениями (SatanaClause)
Author Message
SatanaClause
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Oct 30, 2006 12:46 pm ()
   Post subject: Связанные таблицы в MySQL с некоторыми ограничениями
Reply with quote

Есть одна проблемка, ломаю голову не первый день... Есть две таблицы:

1. Таблица статической информации, которая меняется/добавляется очень редко.
Code (any language): скопировать код в буфер обмена
CREATE TABLE `gs_udb_static` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `group` varchar(255) NOT NULL default '',
  `text` varchar(255) NOT NULL default '',
  `comment` text NOT NULL,
  `status` int(1) default '1',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=19;

INSERT INTO `gs_udb_static` VALUES (1, 'g_NC_speed', '10/100 Mbt/s', '', 1);
INSERT INTO `gs_udb_static` VALUES (2, 'g_NC_speed', '10 Mbt/s', '', 1);
INSERT INTO `gs_udb_static` VALUES (17, 'g_NC_company', 'Compex', '', 1);
INSERT INTO `gs_udb_static` VALUES (4, 'g_WHO', 'Alan Vezhbitskis', '', 1);
INSERT INTO `gs_udb_static` VALUES (5, 'g_WHO', 'Jurij Burlov', '', 1);
INSERT INTO `gs_udb_static` VALUES (6, 'g_WHO', 'Romualdas Jokubavičius', '', 1);
INSERT INTO `gs_udb_static` VALUES (12, 'g_WHERE', 'Mokykla 513', '', 1);
INSERT INTO `gs_udb_static` VALUES (13, 'g_WHERE', 'Mokykla 013', '', 1);
INSERT INTO `gs_udb_static` VALUES (14, 'g_NC_slot', 'ISA', '', 1);
INSERT INTO `gs_udb_static` VALUES (15, 'g_NC_slot', 'PCI', '', 1);
INSERT INTO `gs_udb_static` VALUES (16, 'g_NC_company', 'Realtek', '', 1);
INSERT INTO `gs_udb_static` VALUES (18, 'g_NC_chip', 'RTL8029', '', 1);
2. Таблица сетевых карт
Code (any language): скопировать код в буфер обмена
CREATE TABLE `gs_udb_nc` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `where_id` int(10) default '0',
  `who_id` int(10) default '0',
  `parent_id` int(10) default '0',
  `inv` varchar(255) default '',
  `speed_id` int(10) default '0',
  `slot_id` int(10) default '0',
  `chip_id` int(10) default '0',
  `company_id` int(10) NOT NULL default '0',
  `garantija_id` int(10) default '0',
  `comment` text,
  `status` int(1) default '1',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=3;

INSERT INTO `gs_udb_nc` VALUES (1, 12, 4, 0, 'INV123231', 1, 14, 18, 17, 0, 'bububu', 1);
INSERT INTO `gs_udb_nc` VALUES (2, 12, 6, 0, 'INV0600191P', 1, 15, 18, 16, 0, 'blablabla', 1);
В таблице 2 в полях where_id, who_id, speed_id, slot_id, chip_id и company_id хранятся id из таблицы 1

Надо реализовать простейщую связанную таблицу, тоесть вытащить:
Code (any language): скопировать код в буфер обмена
gs_udb_nc.id,
gs_udb_nc.inv,
gs_udb_static.text (где gs_udb_nc.where_id=gs_udb_static.id,
gs_udb_static.text (где gs_udb_nc.speed_id=gs_udb_static.id,
gs_udb_static.text (где gs_udb_nc.slot_id=gs_udb_static.id,
gs_udb_static.text (где gs_udb_nc.chip_id=gs_udb_static.id,
gs_udb_static.text (где gs_udb_nc.company_id=gs_udb_static.id,
gs_udb_nc.status
Но проблема заключается в том что я использую как конектор между базой и SQL запросом AdoDB (adodb.sourceforge.net), а он ,как я понял, не умеет работать с временными таблицами и понимает только стандартный SQL (тоесть который будет одинакого работать и на PosrgresSql и на MySQL ...)

Вместо временной таблицы я решил использовать статическую таблицу (записей будет не так уж и много, гдето 50 таблиц в которых по 500-1000 записей) и из этих 50 таблиц будет выборка гдето в 10, тоесть временных таблиц нужно около 10.

вот пример временной таблицы для gs_udb_nc
Code (any language): скопировать код в буфер обмена
CREATE TABLE `temp_nc` (
  `id` int(10) default '0',
  `inv` varchar(255) default '',
  `where_id` varchar(255) default '',
  `speed_id` varchar(255) default '',
  `slot_id` varchar(255) default '',
  `chip_id` varchar(255) default '',
  `company_id` varchar(255) default '',
  `status` int(1) default '1'
) TYPE=MyISAM;
Но если можно обойтись без нее будет вообще замечательно.
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Mon Oct 30, 2006 1:17 pm (спустя 31 минуту; написано за 20 секунд)
   Post subject:
Reply with quote

хмм, вот один из решений
Quote:
SELECT
gs_udb_nc.id,
gs_udb_nc.inv,
gs_udb_where.text,
gs_udb_speed.text,
gs_udb_slot.text,
gs_udb_chip.text,
gs_udb_company.text,
gs_udb_nc.status
FROM gs_udb_nc
LEFT JOIN gs_udb_static AS gs_udb_where ON gs_udb_nc.where_id=gs_udb_where.id
LEFT JOIN gs_udb_static AS gs_udb_speed ON gs_udb_nc.speed_id=gs_udb_speed.id
LEFT JOIN gs_udb_static AS gs_udb_slot ON gs_udb_nc.slot_id=gs_udb_slot.id
LEFT JOIN gs_udb_static AS gs_udb_chip ON gs_udb_nc.chip_id=gs_udb_chip.id
LEFT JOIN gs_udb_static AS gs_udb_company ON gs_udb_nc.company_id=gs_udb_company.id
Back to top
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML